﻿//dispaly.c
//液晶显示模块

#define uchar unsigned char

sbit RS=0xb0;
sbit RW=0xb1;
sbit E=0xb2;

void lcd_w_cmd(uchar com);
void lcd_w_dat(uchar dat);
uchar lcd_r_start();
void int1();

//初始化液晶显示,使用前必须初始化一下
void int1(){
	lcd_w_cmd(0x3c);
	lcd_w_cmd(0x0e);
	lcd_w_cmd(0x01);
	lcd_w_cmd(0x06);
	lcd_w_cmd(0x80);
}

//读状态字
//D7=0 空闲 D7=1 忙
uchar lcd_r_start(){
	uchar s;
	RW=1;
	delay1();
	RS=0;
	delay1();
	E=1;
	delay1();
	s=P1;
	delay1();
	E=0;
	delay1();
	RW=0;
	delay1();
	return(s);
}

//写命令字,用于显示定位
//0x80-0x8f 第一排十六个位置
//0xc0-0xcf 第二排十六个位置
void lcd_w_cmd(uchar com){
	uchar i;
	do{
		i=lcd_r_start();
		i=i&0x80;
		delay(2);
	}while(i!=0);
	RW=0;
	delay1();
	RS=0;
	delay1();
	E=1;
	delay1();
	P1=com;
	delay1();
	E=0;
	delay1();
	RW=1;
	delay(255);
}

//写数据
void lcd_w_dat(uchar dat){
	uchar i;
	do{
		i=lcd_r_start();
		i=i&0x80;
		delay(2);
	}while(i!=0);
	RW=0;
	delay1();
	RS=1;
	delay1();
	E=1;
	delay1();
	P1=dat;
	delay1();
	E=0;
	delay1();
	RW=1;
	delay(255);
}